package com.tfjybj.itoo.teach.provider.service;

import com.dmsdbj.itoo.tool.base.service.BaseServicePlus;
import com.dmsdbj.itoo.tool.business.ItooResult;
import com.github.pagehelper.PageInfo;
import com.tfjybj.itoo.teach.entity.AdmTeachClassEntity;
import com.tfjybj.itoo.teach.model.ClassModel;
import com.tfjybj.itoo.teach.model.StudentModel;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.List;


/**
 * AdmTeachClassService接口
 * admTeachClass表
 *
 * @author 田成荣
 * @version 2.0.0
 * @since 2.0.0 2018-11-08 19:34:10
 */
public interface AdmTeachClassService extends BaseServicePlus<AdmTeachClassEntity> {
	
	//region 模板生成：模糊查询
	/**
     * 根据行政班id模糊查询admTeachClass
     *
     * @param classId  行政班id
     * @param pageNo   页码
     * @param pageSize 页数
     * @return 模糊查询的admTeachClass
     * @author 田成荣
     * @since 2.0.0 2018-11-08 19:34:10
     */
    PageInfo<AdmTeachClassEntity> queryByLikeClassId(String classId, Integer pageNo, Integer pageSize);
	//endregion

    /* **********************************以下为非模板生成的内容********************************* */

    /**
     * 根据上课班ID查询所有的行政班ID
     *
     * @param teachClassId  上课班ID
     * @return 该上课班ID下所有的行政班ID
     * @author 严文文
     * @since 2.0.0 2018-11-10 10:40:28
     */
    List<String > queryAdmTeachclass(String teachClassId);

    /**
     * 根据上课班ID查询行政班code,行政班名称,所属学院
     *
     * @param teachClassId 上课班id
     * @param pageNo  页码
     * @param pageSize  页数
     * @return ClassModel
     * @author 严文文
     * @since 2.0.0 2018-11-17 08:58:33
     */
    PageInfo<ClassModel> queryClassInfoByTeacherClassId(String teachClassId, Integer pageNo, Integer pageSize);
    /**
     * 根据专业ID查询所属学院
     *
     * @param professionId
     * @return String
     * @author 严文文
     * @since 2.0.0 2018-11-22 20:50:32
     */

    String queryAcademyNameByProfessionId(String professionId);
    /**
     * 根据学生ID查询班级名称
     *
     * @param studentId
     * @return String
     * @author 严文文
     * @since 2.0.0 2018-11-22 21:32:09
     */
    String queryClassNameByStudentId(String studentId);
    /**
     * 多个行政班合成一个上课班,返回该上课班Id
     *
     * @param classIds  多个行政班Id
     * @return 上课班Id
     * @author 严文文
     * @since 2.0.0 22018-11-10 16:10:18
     */

    String  insertTeachClassIdByClassIds(List<String> classIds);

    /**
     * 根据班级id查询学生相关信息
     *
     * @param classId 班级ID
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 学生信息（分页）
     * @author 严文文
     * @since 2.0.0 2018-11-11 21:38:59
     */
    PageInfo<StudentModel> queryStudentInfoByClassId(String classId, Integer pageNum, Integer pageSize);


    /**
     * 根据班级id查询学生相关信息
     *
     * @param strLike 模糊查询
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 学生信息（分页）
     * @author 严文文
     * @since 2.0.0 2018-11-11 21:38:59
     */
    PageInfo<StudentModel> queryStudentInfoByCodeAndNameStrLike(String strLike, Integer pageNum, Integer pageSize);

    /**
     * 分页根据关键词模糊查询某上课班下的行政班名称
     *
     * @param strLike
     * @param teachClassId
     * @param pageNum
     * @param pageSize
     * @return 查询的admTeachClass
     * @author 严文文
     * @since 2.0.0 2018-11-19 21:08:06
     */
    PageInfo<ClassModel>  queryAdmTeachClassInfoByNameStrLike(String strLike, String teachClassId, Integer pageNum, Integer pageSize);
    /**
     * 分页根据关键词模糊查询某上课班下的行政班code或行政班名称
     *
     * @param classCode
     * @param className
     * @param teachClassId
     * @param pageNum
     * @param pageSize
     * @return ClassModel
     * @author 严文文
     * @since 2.0.0 2018-11-19 21:08:06
     */
    PageInfo<ClassModel>  queryAdmTeachClassInfoByCodeAndNameStrLike(String classCode, String className, String teachClassId, Integer pageNum, Integer pageSize);
    /**
     *删除上课班对应的行政班信息
     *
     * @param classIds 行政班Ids
     * @param teachClassId 上课班Id
     * @param operator 操作者
     * @return 删除结果
     * @author 严文文
     * *@since 2.0.0 2018-11-13 09:04:41
     */
    boolean deleteAdmTeachclass(List<String> classIds, String teachClassId, String operator);

    /**
     * 单个删除上课班对应的行政班信息
     *
     * @param classId
     * @param teachClassId
     * @param operator
     * @return boolean
     * @author 严文文
     * @since 2.0.0 2018-12-5 14:48:38
     */
    boolean deleteSingleAdmTeachclass(String classId, String teachClassId, String operator);


    /**
     *上课班批量添加行政班
     *
     * @param classIds 行政班Ids
     * @param teachClassId 上课班Id
     * @param operator 操作者
     * @return int
     * @author 严文文
     * @since 2.0.0 2018-12-5 14:48:38
     */

    int insertAdmTeachClass(List<String> classIds, String teachClassId, String operator);

    /**
     * 上课班批量删除学生
     *
     * @param studentIds
     * @param teachClassId
     * @param operator
     * @return int
     * @author 严文文
     * @since 2.0.0 2018-12-5 14:48:38
     */
    int deleteAdmTeachClassByStudentIds(List<String> studentIds, String teachClassId, String operator);


    /**
     * 下载上课班和行政班关系表模板，批量导入使用
     *
     * @param response 响应
     * @return 下载模板是否成功
     * @author 严文文
     * @since 2.0.0 2018-11-25 17:51:30
     */
    boolean downLoadAdmTeachClassTemplate(HttpServletResponse response);


    /**
     * 导出错误数据
     *
     * @param response 响应
     * @param errorListId 为成功导入的分组id
     * @return 课程信息model
     * @author 严文文
     * @since 2018-12-2 21:44:54
     */
    boolean downErrorList(String errorListId, HttpServletResponse response);
    /**
     * 批量导入上课班和行政班关系表
     *
     * @param multipartFile 批量导入的文件
     * @param request       请求
     * @param response      响应
     * @param teachClassId  上课班id
     * @return ItooResult
     * @author 严文文
     * @since 2.0.0 2018-11-26 11:47:31
     */
    ItooResult importAdmTeachClassByTemplate(MultipartFile multipartFile, HttpServletRequest request, HttpServletResponse response, String teachClassId);


    /**
     * 根据上课班ID和行政班ID查询id
     * @param classId   行政班id
     * @param teachClassId   上课班id
     * @return String
     * @author 严文文
     * @since 2.0.0 2018-11-26 11:47:31
     */
    String findIdIsExist(String classId, String teachClassId);

    /**
     *判断是否重复添加，根据classId和teachClassId
     * @param classId        行政班id
     * @param teachClassId  上课班id
     * @return Boolean
     * @author 胡泽宽
     * @since 2.0.0 2018年12月2日 10:49:34
     */
    Boolean checkByclassIdandteachClassId(String classId, String teachClassId);

    /**
     * 根据行政班ids和上课班ID查询ID
     * @param classIds      行政班id 集合
     * @param teachClassId  上课班id
     * @return String
     * @author 严文文
     * @since 2.0.0 2018-12-5 11:01:38
     */

    List<String> queryIdsByclassIdsAndTeachClassId(List<String> classIds, String teachClassId);

    /**
     * 根据上课班id,行政班id查询id
     * @param classId
     * @param teachClassId
     * @return String
     * @author 严文文
     * @since 2.0.0 2018-12-5 14:53:33
     */
    String queryIdByClassIdAndTeachClassId(String classId, String teachClassId);
}
